<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <meta http-equiv="X-UA-Compatible" content="ie=edge">
  <title>Document</title>
</head>
<body>
  <h3>类</h3>
  <ul>
    <li>
      基于类的程序设计中一种最基本的模式是允许使用继承来扩展现有的类
    </li>
    <li>
      类由class声明，包括属性、方法、构造函数，new操作class时，回调用之前定义的构造函数
    </li>
    <li>
      类可以实现接口，表示明确的强制一个类去符合某种契约,接口描述了类的公共部分
    </li>
    <li>允许使用继承来扩展现有类，派生类成为“子类”，积累常常称为“超类”</li>
    <li>
      子类如果包含构造函数时，必须在子类构造函数中调用super(),并会执行父类的构造函数。而且在构造函数里访问this属性之前一定要调用super()。<span>这是TypeScript强制执行的一条规则</span>
    </li>
    <li>
      存取器： 只带有get不带有set的存取器自动被推断为readonly
    </li>
    <li>
      可以使用readonly关键字将属性设置为只读的，只读属性必须在声明时或构造函数里进行初始化
    </li>
    <li>
      类的实例成员：仅当类被实例化时才会被初始化的属性
    </li>
    <li>
      类的静态成员：存在于类本身上面，而不是在类的实例上
    </li>
    <li>
      <h3>抽象类</h3>
      <ul>
        <li>
          abstract关键字时用于定义抽象类和在抽象类内部定义抽象方法。
        </li>
        <li>
          抽象类中的抽象方法不包含具体实现并且必须在派生类中实现。抽象方法的语法与接口方法类似。然而抽象方法必须包含abstract关键字
        </li>
        <li>
          不能创建一个抽象类的实例。
        </li>
      </ul>
    </li>
  </ul>


  <script src="./index.js"></script>
</body>
</html>